﻿using System;
using System.Text;
using System.Drawing;
using System.Buffers;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;

public static partial class glDRIVE
{
    /*
    函数 gl.newt
    方程求根newton法
    f方程左端函数f(x)的函数名。
    df方程左端函数f(x)一阶导函数名。
    参数 x: x存放方程根的初值。返回迭代终值。
    参数 eps: 控制精度要求。
    参数 inter: 最多迭代次数,500
    返回值 若返回-1，则表示出现df/dx=0的情况。程序最多迭代次数为500。
    */

    public static string drive_newt()
    {
        int k;
        double x, eps;
        eps = 0.000001;
        x = 1.5;

        gl.f_x = newtf;
        gl.df_x = newtdf;
        double[] xa = new double[1] { x };
        k = gl.newt(xa, eps, 500);
        if (k >= 0)
        {
            return gl.html_table("迭代次数=" + k + "，迭代终值:", xa);
        }
        return "error: " + k;
    }

    // f(x)
    private static double newtf(double x)
    {
        return (x * x * (x - 1.0) - 1.0);
    }

    // df(x)/dx
    private static double newtdf(double x)
    {
        return (3.0 * x * x - 2.0 * x);
    }
}